package com.simple.common.entity.typehandler;

import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.util.Objects;

/**
 * @author yasud
 * @date 2021年01月05日 17:44
 * @description
 */
@Slf4j
@MappedTypes({Object.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MyJacksonTypeHandler extends JacksonTypeHandler {


    public MyJacksonTypeHandler(Class<?> type) {
        super(type);
    }

    @Override
    protected Object parse(String json) {
        if (StringUtils.isBlank(json)) return null;
        JsonElement jsonElement = JsonParser.parseString(json);
        if (jsonElement.isJsonObject() || jsonElement.isJsonArray()) {
            return super.parse(json);
        }
        return json;
    }

    @Override
    protected String toJson(Object obj) {
        if (Objects.isNull(obj)) return null;
        return super.toJson(obj);
    }
}
